package hash

import "hash/crc32"

// HashFunc 哈希函数类型
type HashFunc struct {
	capacity int // 容量
	seed     int // 随机数种子
}

// InitHashFunc 初始化哈希函数
func InitHashFunc(capacity, seed int) *HashFunc {
	return &HashFunc{
		capacity: capacity,
		seed:     seed,
	}
}

// Hash 哈希方法: 返回key映射结果
func (hashFunc *HashFunc) Hash(key string) int {
	v := int(crc32.ChecksumIEEE([]byte(key)))
	return (hashFunc.capacity * hashFunc.seed % 80) & (v >> 16)
}
